package netGames;

import dominioProblema.Lancamento;
import dominioProblema.Mesa;
import br.ufsc.inf.leobr.cliente.Jogada;
import br.ufsc.inf.leobr.cliente.OuvidorProxy;
import br.ufsc.inf.leobr.cliente.Proxy;
import br.ufsc.inf.leobr.cliente.exception.ArquivoMultiplayerException;
import br.ufsc.inf.leobr.cliente.exception.JahConectadoException;
import br.ufsc.inf.leobr.cliente.exception.NaoConectadoException;
import br.ufsc.inf.leobr.cliente.exception.NaoJogandoException;
import br.ufsc.inf.leobr.cliente.exception.NaoPossivelConectarException;

public class NetGamesNRT implements OuvidorProxy{

	protected static final long serialVersionUID = 1L;
	protected Proxy proxy;
	protected Mesa me;
	protected boolean conectado;
	protected String nome = "";
	protected boolean minhaVez = false;

	public NetGamesNRT(Mesa m){
		super();
		this.me = m;
		proxy = Proxy.getInstance();
		proxy.addOuvinte(this);
	}

	@SuppressWarnings("finally")
	public boolean conectarNetGames(String nome, String servidor){
		if(this.nome==""){
			this.nome = nome;
		}		
		this.conectado = false;
		try {
			proxy.conectar(servidor, nome);
			this.conectado = true;
		} catch (JahConectadoException e) {
			this.conectado = true;
			e.printStackTrace();
		} catch (NaoPossivelConectarException e) {
			this.conectado = false;
			e.printStackTrace();
		} catch (ArquivoMultiplayerException e) {
			this.conectado = false;
			e.printStackTrace();
		}
		finally{
			return this.conectado;
		}

	}

	public boolean desconectarNetGames(){
		try {
			proxy.desconectar();
			this.conectado = false;
			return true;
		} catch (NaoConectadoException e) {
			return false;
		}
	}

	public void iniciarPartidaRede(){
		try {
			proxy.iniciarPartida(2);
		} catch (NaoConectadoException e) {
			me.solicitaConexao();
			e.printStackTrace();
		}
	}

	public boolean isConectado() {
		return this.conectado;
	}

	@Override
	public void iniciarNovaPartida(Integer posicao) {
		if(posicao==1){
			this.minhaVez = true;
		}else{
			this.minhaVez = false;
		}
		
		me.iniciarPartidaRede(minhaVez);
	}
	
	public String obterNomeOponente(){
		String n = "";
		if(this.minhaVez){
			n = proxy.obterNomeAdversario(2);
		}else{
			n = proxy.obterNomeAdversario(1);
		}
		return n;	
	}

	@Override
	public void finalizarPartidaComErro(String message) {
		// TODO Auto-generated method stub

	}

	@Override
	public void receberMensagem(String msg) {
		// TODO Auto-generated method stub

	}

	@Override
	public void receberJogada(Jogada jogada) {
		Lancamento l = (Lancamento) jogada;
		this.me.recebeJogada(l);

	}

	@Override
	public void tratarConexaoPerdida() {
		// TODO Auto-generated method stub

	}

	@Override
	public void tratarPartidaNaoIniciada(String message) {
		// TODO Auto-generated method stub

	}

	public void enviarJogada(Jogada jogada) throws NaoJogandoException {
		this.proxy.enviaJogada(jogada);
		}

	/**
	 * 
	 * @param jogada
	 */


}